package jvm;

/**
 * @description:
 * @author: Lidong
 * @time: 2020/5/26 23:16
 **/
public class LocalVaribleTest {
    /**
     * 方法中定义的局部变量是否线程安全？具体问题具体分析
     * 线程安全？只有一个线程操作次数据，必定是线程安全的
     * 如果有多个线程操作次数据，则该数据共享,如果不考虑同步问题则线程不安全
     */

    //stringBuilder的声明方式是线程安全的因为只有一个线程使用它
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("a");
        stringBuilder.append("b");

        StringBuilder s = new StringBuilder();
        new Thread(() -> {
            s.append("x");
            s.append("b");
        }).start();

        method2(s);
    }

    public static void method2(StringBuilder builer) {
        builer.append("a");
        builer.append("b");
    }


    //builder是线程不安全的，存在不安全的问题
    public static void method3(StringBuilder builer) {
        builer.append("a");
        builer.append("b");
    }

    //有可能存在线程不安全，返回的东西被多个线程使用
    public static StringBuilder method3() {
        StringBuilder builder = new StringBuilder();
        builder.append("a");
        builder.append("b");
        return builder;
    }

    //builder是线程安全的,但是返回的东西有可能是不安全的
    public static String method4() {
        StringBuilder builder = new StringBuilder();
        builder.append("a");
        builder.append("b");
        return builder.toString();
    }

}
